# coding:utf-8


from bs4 import BeautifulSoup
import urllib.parse
import urllib.request
from urllib.parse import quote
import string
# 设置字体
from .ZDao import getConnect


def getChartsData(areaName,jobName):
    # 连接数据库
    # 操作数据库,将数据存储进去
    db =getConnect()
    # 使用cursor()方法获取操作游标,即操作数据库的一个对象
    sql = ""
    cur = db.cursor()  # 游标 操作数据表
    sql ="select job_edu,count(*) from jobs where job_loc like '%"+areaName+"%' and job_name like '%"+jobName+"%' group by job_edu "
    print(sql)
    edus = [];
    counts = [];
    try:
        cur.execute(sql)
        res = cur.fetchall()  # 查到的所有的记录 是一个集合
        for r in res:
            edus.append(r[0]);
            counts.append(r[1]);
        data = {"edus": edus, "counts": counts};
        return data;
    except:
        db.rollback()

# 爬取数据方法
def run():
    jName = input("请输入城市");
    #jName='北京'
    city = {'北京': '530',
            '上海': '538',
            '广州': '763',
            '深圳': '765',
            '天津': '531',
            '武汉': '736',
            '西安': '854',
            '成都': '801',
            '沈阳': '599',
            '南京': '635',
            '杭州': '653',
            '苏州': '639',
            '重庆': '551',
            '长沙': '749',
            '厦门': '682',
            '南昌': '691'
            }  # 如果还要其它城市 对着页面，查看城市编码 https://sou.zhaopin.com/?jl=691&kw=java&p=1
    jName=city[jName]
    aName = input("请输入岗位");
    #aName='java'
    #num = 1
    #while num <= 5:
    url = 'https://sou.zhaopin.com/?jl='+jName+'&kw=' + aName + '&p=1'
    url = quote(url, safe=string.printable)
    res = urllib.request.urlopen(url)
    content = res.read().decode()

    # 整个页面的数据
    # 创建一个Beautifulsoup对象
    soup = BeautifulSoup(content, 'lxml')
    jobList = soup.select(".joblist-box__item")
    # 创建一个list存放job相关信息的字典
    job_list = []
    for job in jobList:
        job_dic = {}
        # 每一个job都是一个工作的信息的div
        # 岗位名称
        job_name = job.select('.jobinfo__name')[0].get_text()
        #print(job_name)
        # 公司名称
        company_name = job.select('.companyinfo__name')[0].get_text()
        #print(company_name)
        # 工资
        job_salary = job.select('.jobinfo__salary')[0].get_text()
        job_salary = job_salary.strip().replace(' ', '').replace('\n', '')
        str2 = job_salary  # 1万-2万，取的是1万

        if '天' in str2:
            str2 = int(str2.split("-")[0]) * 30
        elif ('千' in str2):
            str2 = (int(str2.split('千')[0]) * 1000)
        elif ('万' in str2):  # 含万
            str2 = float(str2.split("万")[0]) * 10000
        else:
            str2 = 5000
        print(str2)
        # 获取工作地点、经验要求、学历要求
        lis = job.select('.jobinfo__other-info-item')
        job_loc = lis[0].get_text()
        job_exp = lis[1].get_text()
        job_edu = lis[2].get_text()
        job_dic['job_name'] = job_name
        job_dic['company_name'] = company_name
        job_dic['job_salary'] = str2
        job_loc = job_loc.split("-")[0]
        job_dic['job_loc'] = job_loc
        job_dic['job_exp'] = job_exp
        job_dic['job_edu'] = job_edu
        job_list.append(job_dic)
    # 操作数据库,将数据存储进去
    db = getConnect();
    # 使用cursor()方法获取操作游标,即操作数据库的一个对象
    cursor = db.cursor()
    # 使用格式化输出的方式将变量传进去
    for i in job_list:
        sql = "INSERT INTO jobs(jid,job_name,company_name,job_sal,job_loc,job_exp,job_edu) VALUES(null,'%s','%s','%s','%s','%s','%s')" % (
            i["job_name"], i["company_name"], i["job_salary"], i["job_loc"], i["job_exp"], i["job_edu"])
        # 执行多条插入语句使用cursor.executemany(sql,list)
        # 这个list是由每条数据组成的元组
        # 执行语句
        try:
            cursor.execute(sql)
            # 更新操作需要提交
            db.commit()
        except Exception as e:
            print(e)
            print('插入数据失败!')
            # 如果有异常需要回滚
            db.rollback()
    # 关闭游标
    cursor.close()
    # 关闭数据库连接
    db.close()
    print("爬取数据成功")




run();